home *** CD-ROM | disk | FTP | other *** search
/ Amiga Aktuell / Amiga Aktuell.iso / libs / dbm.py < prev    next >
Text File  |  1996-09-05  |  1KB  |  67 lines

  1. # A wrapper around the (optional) built-in class dbm, supporting keys
  2. # and values of almost any type instead of just string.
  3. # (Actually, this works only for keys and values that can be read back
  4. # correctly after being converted to a string.)
  5.  
  6.  
  7. class Dbm:
  8.  
  9.     def __init__(self, filename, mode, perm):
  10.         import dbm
  11.         self.db = dbm.open(filename, mode, perm)
  12.  
  13.     def __repr__(self):
  14.         s = ''
  15.         for key in self.keys():
  16.             t = `key` + ': ' + `self[key]`
  17.             if s: t = ', ' + t
  18.             s = s + t
  19.         return '{' + s + '}'
  20.  
  21.     def __len__(self):
  22.         return len(self.db)
  23.  
  24.     def __getitem__(self, key):
  25.         return eval(self.db[`key`])
  26.  
  27.     def __setitem__(self, key, value):
  28.         self.db[`key`] = `value`
  29.  
  30.     def __delitem__(self, key):
  31.         del self.db[`key`]
  32.  
  33.     def keys(self):
  34.         res = []
  35.         for key in self.db.keys():
  36.             res.append(eval(key))
  37.         return res
  38.  
  39.     def has_key(self, key):
  40.         return self.db.has_key(`key`)
  41.  
  42.  
  43. def test():
  44.     d = Dbm('@dbm', 'rw', 0600)
  45.     print d
  46.     while 1:
  47.         try:
  48.             key = input('key: ')
  49.             if d.has_key(key):
  50.                 value = d[key]
  51.                 print 'currently:', value
  52.             value = input('value: ')
  53.             if value == None:
  54.                 del d[key]
  55.             else:
  56.                 d[key] = value
  57.         except KeyboardInterrupt:
  58.             print ''
  59.             print d
  60.         except EOFError:
  61.             print '[eof]'
  62.             break
  63.     print d
  64.  
  65.  
  66. test()
  67.